perm filename UDDT.PAL[KL,SYS] blob sn#273553 filedate 1977-04-06 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00009 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	.TITLE UDDT DDT FOR KL10 MICROMACHINE
C00003 00003	.= prints CRAM addr, ./ does an ALL, .[ prints CRAM addr and data
C00005 00004	E n   step EBOX clock by n.  Default n = 1.
C00006 00005	H     halt EBOX clock,  G  restart EBOX clock
C00007 00006	B     remove all breakpoints, B n   set at n,  B-n  remove at n
C00010 00007	P     procede EBOX clock single stepping
C00011 00008	PASS:	MOV #LINBUF,R1
C00013 00009	UPATCH:	.BLKW 40
C00014 ENDMK
CāŠ—;
.TITLE UDDT DDT FOR KL10 MICROMACHINE

.ABS
FUQ2::
DTEASB==1	;ASSEMBLE DTE20 DEFINITIONS
.XLIST
.INSRT PRM11
.LIST
.=3000
UDDT:	PMSG <MICRO DDT.\>
	MOV #DDZBEG,R0
ZLUP:	CLR (R0)+
	CMP R0,#DDZEND
	BLO ZLUP
TOPL:	PMSG <*>
	TTILIN			;GET A LINE
	TTICHR			;GET FIRST CHARACTER
	CMPB R0,#'a
	BLT TOP1
	CMPB R0,#'z
	BGT TOP1
	SUB #40,R0
TOP1:	MOV #CHRTBL,R1
TOP2:	CMPB R0,(R1)
	BEQ TOP3
	TSTB (R1)+
	BNE TOP2
	BR TOPR

TOP3:	SUB #CHRTBL,R1
	ASL R1
	JMP @DSPTBL(R1)

TOPR:	PMSG < ??\>
TOPX:	BR TOPL
;.= prints CRAM addr, ./ does an ALL, .[ prints CRAM addr and data

.CMD:	TTICHR
	BCS TOPR
	CMPB R0,#'=
	BEQ CRMADR
	CMPB R0,#'/
	BEQ ALL
	CMPB R0,#'[
	BEQ CRM
TOPR1:	BR TOPR

CRMADR:	JSR PC,GETCRA		;GET CURRENT CRAM ADDRESS INTO $ECADR
	PMSG <CRA LOC = >
	MOV $ECADR,R0
	PNTODT
	4
	PCRLF
	BR TOPX

GETCRA:	DFRDT
	RCRAM2			;GET CRA LOC 05-10
	JSR PC,$ECGET
	PUSH $ECADR
	DFRDT
	RCRAM1			;GET CRA LOC 00-04
	POP R0
	JSR PC,$ECGET
	ASL R0			;MOVE CRA LOC 05-10 TO BITS 6-0
	ASL R0
	SWAB R0
	BISB R0,$ECADR
	BIC #174000,$ECADR
	RTS PC

$ECGET:	MOV DTEADR+4,$ECADR	;GET EBUS BITS 4,5 TO HI TWO BITS OF HI BYTE
	MOVB DTEADR+6,$ECADR	;GET EBUS BITS 0-3 TO LO 4 BITS OF LOW BYTE
	SWAB $ECADR		;GET 0-5 TO BITS 11-6
	BIC #170077,$ECADR
	RTS PC

ALL:	MOV #ALLADR,R0
	PRGCMD
	BR TOPX

CRM:	JSR PC,GETCRA		;GET CURRENT CRAM ADDRESS INTO $ECADR
	MOV #-1,R0
	RCRAM			;READ CURRENT CRAM CONTENTS
	MOV R0,R1		;COPY DATA ADDRESS TO R1
	MOV $ECADR,R0
	PNTCRM			;PRINT CRAM ADDRESS AND DATA
	PCRLF
TOPX1:	BR TOPX
;E n   step EBOX clock by n.  Default n = 1.

ECMD:	TTISDL			;DELETE SPACES
	BCS ECMD1
	TTIDEC			;GET DECIMAL NUMBER OF STEPS
	BCS TOPR1
	MOV R0,R1
	BR ECMD2

ECMD1:	TTERM
	BCS TOPR1
	MOV #1,R1
ECMD2:	ECLOK			;SINGLE STEP THE EBOX CLOCK
	BCS ECLKER
	SOB R1,ECMD2
	BR TOPX1

ECLKER:	PMSG <CLK?\>
	BR TOPX1
;H     halt EBOX clock,  G  restart EBOX clock

HCMD:	TTICHR
	TTERM
	BCS TOPR1
	DFXCTT
	 STPCLK
	DFXCTT
	 CECLK			;CONDITIONAL EBOX CLK
	BR TOPX1

GCMD:	TTICHR
	TTERM
	BCS TOPR1
	DFXCTT
	 STRCLK
	BR TOPX1
;B     remove all breakpoints, B n   set at n,  B-n  remove at n

BCMD:	TTISDL
	BCS CLRALL		;NON-NUMBER, CLEAR ALL BPTS
	TTIOCT
	BCS TOPR1		;NOT OCTAL
	BMI CLRBPT		;-ADDR MEANS CLEAR BPT AT THAT ADDR
	JSR PC,FNDBPT		;SEE IF IT IS THERE ALREADY
	BR SETBP1
	BR TOPX1		;IT'S ALREADY SET

SETBP1:	JSR PC,FNDFRE		;FIND NEXT FREE BREAKPOINT SLOT
	BR NOMORE
	MOV R0,BPTADR(R1)	;STORE ADDRESS OF BREAKPOINT
	MOV #-1,BPTUSE(R1)	;AND SET IN USE FLAG
	BR TOPX1

NOMORE:	PMSG <SORRY, NO FREE BREAKPOINT SLOTS\>
	BR TOPX1

CLRALL:	TTICHR
	TTERM
	BCS TOPR1
	MOV #NBPT,R1
	MOV #BPTUSE,R0
CLRAL1:	CLR (R0)+
	SOB R1,CLRAL1
	BR TOPX1

CLRBPT:	JSR PC,FNDBPT
	BR NOTFND		;NO SUCH BREAKPOINT IS SET
	CLR BPTUSE(R1)
	BR TOPX1

NOTFND:	PMSG <SORRY, NO BREAKPOINT THERE\>
TOPX2:	BR TOPX1

;FIND A FREE BREAKPOINT SLOT, SKIP RETURN IF THERE IS ONE WITH INDEX IN R1
FNDFRE:	MOV #NBPT,R2
	MOV #BPTUSE,R1
FNDFR1:	TST (R1)+
	BPL FNDFR2
	SOB R2,FNDFR1
	RTS PC			;NO FREE BREAKPOINTS

FNDFR2:	SUB #BPTUSE+2,R1	;BREAKPOINT INDEX
	ADD #2,(SP)
	RTS PC

;FIND BREAKPOINT SLOT FOR ADDRESS IN R0
FNDBPT:	MOV #NBPT,R2
	MOV #BPTUSE,R1
FNDBP1:	TST (R1)+
	BMI FNDBP3
FNDBP2:	SOB R2,FNDBP1
	RTS PC			;DIDN'T FIND IT

FNDBP3:	CMP R0,BPTADR-BPTUSE-2(R1)
	BNE FNDBP2		;DOESN'T MATCH
	SUB #BPTUSE+2,R1	;BREAKPOINT INDEX
	ADD #2,(SP)
	RTS PC
;P     procede EBOX clock single stepping

TOPR2:	JMP TOPR

PCMD:	TTICHR
	TTERM
	BCS TOPR2
	TTPINI			;RESET INPUT AND OUTPUT POINTERS
	JSR PC,MSTEP		;MULTIPLE STEP
	BR TOPX2

MSTEP:	MOV #100.,LOOKCT
MSTEPL:	ECLOK
	BCS MSPCER		;CLOCK ERROR
	JSR PC,GETCRA
	MOV $ECADR,R0
	JSR PC,FNDBPT		;IS THERE IS BREAKPOINT THERE
	BR MSTEP1		;NO, KEEP GOING
	PMSG <\BREAKPOINT HIT AT >
	MOV $ECADR,R0
	PNTODT
	4
	PCRLF
	RTS PC			;STOP STEPPING

MSTEP1:	DEC LOOKCT
	BGT MSTEPL
	TTLOOK
	BCS MSTEP		;NO INPUT
	RTS PC			;STOP STEPPING IF ANYTHING TYPED

MSPCER:	PMSG <MULTISTEPPING CLOCK ERROR\>
	RTS PC
PASS:	MOV #LINBUF,R1
PASS1:	TTICHR
	BCS PASS2
	MOVB R0,(R1)+
	BR PASS1

PASS2:	CLRB (R1)
	MOV #LINBUF,R0
	PRGCMD			;GIVE COMMAND TO KLDCP
	JMP TOPL

CHRTBL:	.BYTE '.
	.BYTE 'E
	.BYTE 'H
	.BYTE 'P
	.BYTE 'G
	.BYTE 'B
	.BYTE '?
	.BYTE 15
	.BYTE 0
	.EVEN

DSPTBL:	.CMD
	ECMD
	HCMD
	PCMD
	GCMD
	BCMD
	PASS
	TOPX
UPATCH:	.BLKW 40
DDZBEG::
NBPT==100
BPTADR:	.BLKW NBPT		;CRAM ADDRESS OF BREAKPOINT
BPTUSE:	.BLKW NBPT		;-1 IT THIS BREAKPOINT IS IN USE
DDZEND::
LINBUF:	.BLKB 80.
$ECADR:	0
LOOKCT:	0
ALLADR:	.ASCIZ /ALL
/

.XLIST
$$LITT==.
.IF P2
.=$$CLIT
.ENDC
.LIST

.END UDDT